package com.wn.date20190807;

import java.util.List;

/**
 * 操作point类 1.计算距离原点距离 2.计算两个点的距离 3.判断两个点在同一水平线上 4.判断三个点是否在一条直线上
 * 
 * @author song
 *
 */
public class PointOpration
{
	/**
	 * 1.计算距离原点距离
	 * 参数错误返回-1.0
	 * @param p 点
	 * @return double
	 */
	public static double caculateDistance(Point p)
	{
		// 判空
		if(p==null)
		{
			return-1;
		}
		return Math.sqrt(Math.pow(p.getX(), 2) + Math.pow(p.getY(), 2));
	}

	/**
	 * 2.计算两个点的距离
	 * 参数错误返回-1.0
	 * @param p1
	 * @param p2
	 * @return
	 */
	public static double caculateDistance(Point p1, Point p2)
	{
		// 判空
		if(p1==null||p2==null)
		{
			return -1;
		}
		return Math.sqrt(Math.pow(p1.getX() - p2.getX(), 2) + Math.pow(p1.getY() - p2.getY(), 2));
	}

	/**
	 * 判断两个点在同一水平线上，参数为null返回false
	 * 
	 * @param p1
	 * @param p2
	 * @return
	 */
	public static boolean isLine(Point p1, Point p2)
	{
		// 判空
		if(p1==null||p2==null)
		{
			return false;
		}
		if (p1.getX() == p2.getX() || p1.getY() == p2.getY())
		{
			// 两点不在同一位置
			if(!equals(p1, p2))
			{
				return true;
			}
		}
		return false;
	}

	/**
	 * 判断三个点是否在一条直线上,参数为null返回false
	 * 
	 * @param p1
	 * @param p2
	 * @param p3
	 * @return
	 */
	public static boolean isLine(Point p1, Point p2, Point p3)
	{
		// 斜率
//		double slope1to2 = ((double) p1.getY() - (double) p2.getY()) / ((double) p1.getX() - (double) p2.getX());
//		double slope2to3 = ((double) p2.getY() - (double) p3.getY()) / ((double) p2.getX() - (double) p3.getX());
//		double slope1to3 = ((double) p1.getY() - (double) p3.getY()) / ((double) p1.getX() - (double) p3.getX());
//		
//		if (slope1to2 == slope2to3 && slope2to3 == slope1to3)
//		{
//			return true;
//		}
		// 判空
		if(p1==null||p2==null||p3==null)
		{
			return false;
		}
		//三個點不相等
		if(!(equals(p1, p2)||equals(p3, p2)||equals(p1, p3)))
		{
			if((p3.getY()-p1.getY()) * (p2.getX()-p1.getX())-(p2.getY()-p1.getY())*(p3.getX()-p1.getX())==0)
			{
				return true;
			}
		}
		// (y3−y1)(x2−x1)−(y2−y1)(x3−x1)=0 
		return false;
	}
	/**
	 * 判斷兩個點是否在同一位置
	 * @param p1
	 * @param p2
	 * @return
	 */
	public static boolean equals(Point p1,Point p2)
	{
		if(p1.getX()==p2.getX()&&p1.getY()==p2.getY())
		{
			return true;
		}
		return false;
	}
}
